/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package redinftel.entidades;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Collection;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

/**
 * Clase que representa a un usuario de la red
 * social six degrees.
 * @author Six Degrees Team
 */
@Entity
@Table(name = "USUARIO")
@NamedQueries({
    @NamedQuery(name = "Usuario.findAll", query = "SELECT u FROM Usuario u"),
    @NamedQuery(name = "Usuario.findByIdUsuario", query = "SELECT u FROM Usuario u WHERE u.idUsuario = :idUsuario"),
    @NamedQuery(name = "Usuario.findByEmail", query = "SELECT u FROM Usuario u WHERE u.email = :email"),
    @NamedQuery(name = "Usuario.findByContrasenya", query = "SELECT u FROM Usuario u WHERE u.contrasenya = :contrasenya"),
    @NamedQuery(name = "Usuario.findByCodigoValidacion", query = "SELECT u FROM Usuario u WHERE u.codigoValidacion = :codigoValidacion"),
    @NamedQuery(name = "Usuario.findByEstado", query = "SELECT u FROM Usuario u WHERE u.estado = :estado")})
public class Usuario implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "ID_USUARIO", nullable = false, precision = 22, scale = 0)
    private BigDecimal idUsuario;
    @Column(name = "EMAIL", length = 40)
    private String email;
    @Column(name = "CONTRASENYA", length = 20)
    private String contrasenya;
    @Column(name = "CODIGO_VALIDACION", length = 20)
    private String codigoValidacion;
    @Column(name = "ESTADO", length = 20)
    private String estado;
    @OneToMany(mappedBy = "idUsuario",fetch=FetchType.EAGER)
    private Collection<ListaAmigos> listaAmigosCollection;
    @OneToOne(cascade = CascadeType.ALL, mappedBy = "usuario")
    private Perfil perfil;
    @OneToMany(mappedBy = "idAmigo1",fetch=FetchType.EAGER)
    private Collection<Amistad> amistadCollection;
    @OneToMany(mappedBy = "idAmigo2",fetch=FetchType.EAGER)
    private Collection<Amistad> amistadCollection1;
    @OneToMany(mappedBy = "idEmisor")
    private Collection<Mensaje> mensajeCollection;
    @OneToMany(mappedBy = "idReceptor")
    private Collection<Mensaje> mensajeCollection1;
    @OneToMany(mappedBy = "idUsuarioCreador",fetch=FetchType.EAGER)
    private Collection<Lista> listaCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "usuario", fetch=FetchType.EAGER)
    private Collection<Multimedia> multimediaCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "usuario", fetch=FetchType.EAGER)
    private Collection<Comentariomultimedia> comentariomultimediaCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "usuario",fetch=FetchType.EAGER)
    private Collection<Etiquetas> etiquetasCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "usuario")
    private Collection<Publicacion> publicacionCollection;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "usuario1")
    private Collection<Publicacion> publicacionCollection1;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "usuario")
    private Collection<Comentario> comentarioCollection;
    @OneToMany(mappedBy = "usuario")
    private Collection<Localizacion> localizacionCollection;

    public Usuario() {
    }
    public Usuario(Usuario u) {
        this.amistadCollection = u.amistadCollection;
        this.amistadCollection1 = u.amistadCollection1;
        this.codigoValidacion = u.codigoValidacion;
        this.contrasenya = u.contrasenya;
        this.email = u.email;
        this.estado = u.estado;
        this.idUsuario = u.idUsuario;
        this.listaAmigosCollection = u.listaAmigosCollection;
        this.listaCollection = u.listaCollection;
        this.perfil = u.perfil;
    }

    public Usuario(BigDecimal idUsuario) {
        this.idUsuario = idUsuario;
    }

    public BigDecimal getIdUsuario() {
        return idUsuario;
    }

    public Collection<Localizacion> getLocalizacionCollection() {
        return localizacionCollection;
    }

    public void setLocalizacionCollection(Collection<Localizacion> localizacionCollection) {
        this.localizacionCollection = localizacionCollection;
    }

    public void setIdUsuario(BigDecimal idUsuario) {
        this.idUsuario = idUsuario;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getContrasenya() {
        return contrasenya;
    }

    public void setContrasenya(String contrasenya) {
        this.contrasenya = contrasenya;
    }

    public String getCodigoValidacion() {
        return codigoValidacion;
    }

    public void setCodigoValidacion(String codigoValidacion) {
        this.codigoValidacion = codigoValidacion;
    }

    public String getEstado() {
        return estado;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }

    public Collection<ListaAmigos> getListaAmigosCollection() {
        return listaAmigosCollection;
    }

    public void setListaAmigosCollection(Collection<ListaAmigos> listaAmigosCollection) {
        this.listaAmigosCollection = listaAmigosCollection;
    }

    public Perfil getPerfil() {
        return perfil;
    }

    public void setPerfil(Perfil perfil) {
        this.perfil = perfil;
    }

    public Collection<Amistad> getAmistadCollection() {
        return amistadCollection;
    }

    public void setAmistadCollection(Collection<Amistad> amistadCollection) {
        this.amistadCollection = amistadCollection;
    }

    public Collection<Amistad> getAmistadCollection1() {
        return amistadCollection1;
    }

    public void setAmistadCollection1(Collection<Amistad> amistadCollection1) {
        this.amistadCollection1 = amistadCollection1;
    }

    public Collection<Mensaje> getMensajeCollection() {
        return mensajeCollection;
    }

    public void setMensajeCollection(Collection<Mensaje> mensajeCollection) {
        this.mensajeCollection = mensajeCollection;
    }

    public Collection<Mensaje> getMensajeCollection1() {
        return mensajeCollection1;
    }

    public void setMensajeCollection1(Collection<Mensaje> mensajeCollection1) {
        this.mensajeCollection1 = mensajeCollection1;
    }

    public Collection<Lista> getListaCollection() {
        return listaCollection;
    }

    public void setListaCollection(Collection<Lista> listaCollection) {
        this.listaCollection = listaCollection;
    }

    public Collection<Multimedia> getMultimediaCollection() {
        return multimediaCollection;
    }

    public void setMultimediaCollection(Collection<Multimedia> multimediaCollection) {
        this.multimediaCollection = multimediaCollection;
    }

    public Collection<Comentariomultimedia> getComentariomultimediaCollection() {
        return comentariomultimediaCollection;
    }

    public void setComentariomultimediaCollection(Collection<Comentariomultimedia> comentariomultimediaCollection) {
        this.comentariomultimediaCollection = comentariomultimediaCollection;
    }

    public Collection<Etiquetas> getEtiquetasCollection() {
        return etiquetasCollection;
    }

    public void setEtiquetasCollection(Collection<Etiquetas> etiquetasCollection) {
        this.etiquetasCollection = etiquetasCollection;
    }

    public Collection<Publicacion> getPublicacionCollection() {
        return publicacionCollection;
    }

    public void setPublicacionCollection(Collection<Publicacion> publicacionCollection) {
        this.publicacionCollection = publicacionCollection;
    }

    public Collection<Publicacion> getPublicacionCollection1() {
        return publicacionCollection1;
    }

    public void setPublicacionCollection1(Collection<Publicacion> publicacionCollection1) {
        this.publicacionCollection1 = publicacionCollection1;
    }

    public Collection<Comentario> getComentarioCollection() {
        return comentarioCollection;
    }

    public void setComentarioCollection(Collection<Comentario> comentarioCollection) {
        this.comentarioCollection = comentarioCollection;
    }
    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idUsuario != null ? idUsuario.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Usuario)) {
            return false;
        }
        Usuario other = (Usuario) object;
        if ((this.idUsuario == null && other.idUsuario != null) || (this.idUsuario != null && !this.idUsuario.equals(other.idUsuario))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "redinftel.entidades.Usuario[idUsuario=" + idUsuario + "]";
    }

}
